/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.wib.controller;

import edu.upc.wib.entity.ReporteEfectividad;
import edu.upc.wib.entity.ReporteTorneo;
import edu.upc.wib.service.ReporteService;
import edu.upc.wib.utilitarios.TorneoException;
import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author rv
 */
@Controller("ReporteController")
public class ReporteController {

    @Autowired
    private ReporteService reporteService;
    private final ObjectMapper mapper = new ObjectMapper();

    
    @RequestMapping("/reportes/ReporteEfectividad")
    public ModelAndView reporteEfectividad() {
        ModelAndView mav = new ModelAndView("reportes/ReporteEfectividad");
        Integer idUsuario = 1;
        List<ReporteEfectividad> reporte = reporteService.generarReporteEfectividad(idUsuario);
        mav.addObject("reporte", reporte);
        return mav;
    }

    @RequestMapping("/reportes/ReporteTorneo")
    public ModelAndView reporteTorneo() {
        ModelAndView mav = new ModelAndView("reportes/ReporteTorneo");
        return mav;
    }

    @RequestMapping(value = "/reportes/ReporteTorneo/obtener", method = RequestMethod.GET)
    public @ResponseBody String reporteTorneo(@RequestParam Integer idTorneo, @RequestParam Integer idUsuario) throws TorneoException {
        List<ReporteTorneo> reporte = reporteService.generarReporteTorneo(idTorneo, idUsuario);
        StringWriter writer = new StringWriter();
        
        try {
            mapper.writeValue( writer, reporte );
            return writer.toString();
        } catch( Exception ex ) {
            throw new TorneoException( ex.getMessage() );
        } finally {//XD nunca antes habia puesto un try catch dentro de un finally!
            try { 
                writer.close(); 
            } catch ( IOException ex ) { 
                throw new TorneoException( ex.getMessage() );    
            }
        }
    }
  
}
